package com.sxj.corejava.code10_异常;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 石小俊
 * 2024年07月25日 16:11
 */
public class Test02_异常处理 {

    public static void main(String[] args) {
        //test01();
        //try {
        //    test02("20240204");
        //} catch (ParseException e) {
        //    System.err.println("当前传递的字符串格式不对,请使用指定格式:yyyy-MM-dd");
        //}
        try {
            test03(3, 0);
        } catch (Exception e) {
            System.err.println("执行两数相除遇到了异常,异常原因为:" + e.getMessage());
        }
    }

    public static void test01() {
        try {
            int i = 1 / 0;
            System.out.println("执行代码没有出现异常");
        } catch (ArithmeticException e) {
            //e.printStackTrace();
            System.err.println("执行代码出现了异常");
            System.err.println(e);
            System.err.println(e.getMessage());
            // return表示退出方法
            // 但是在此处try-catch-finally没有执行完成时是不会退出方法的
            // 因此,就算有return,finally仍然会执行
            //return;
            // 想要退出,只能终止正在运行的JVM
            System.exit(0);
        } finally {
            System.out.println("不管是否出现异常,都会执行");
        }
        System.out.println("------------");
    }

    public static void test02(String s) throws ParseException {
        // 方式一:通过catch捕获到异常之后,再抛出去
        try {
            Date date = new SimpleDateFormat("yyyy-MM-dd").parse(s);
        } catch (ParseException e) {
            System.err.println("格式化日期出现了异常");
            // 此处通过throw 异常对象的方式抛出指定异常
            // 可以抛出原异常
            throw e;
            // 也可以抛出其他异常
            // throw new XxxException("xxx");
        }
    }

    public static double test03(int num1, int num2) throws Exception {
        if (num2 == 0) {
            // 由于只有当num2为0的时候会出现异常
            // 我们可以通过判断num2是否为0进行处理
            // 这时候就不需要try-catch
            throw new Exception("除数不能为0");
        }
        return num1 / num2;
    }
}
